package projeto.model.testes;

import org.junit.*;
import projeto.model.*;

/**
 * 
 * @author Javatar
 * Classe usada para fazer testes da classe Estabelecimento (JUnit 4)
 */
public class TestaEstabelecimento {
	private Estabelecimento est1,est2,est3,est4;

	@Before
	public void criaEstabelecimento() throws Exception{
		est3 = new Estabelecimento("Taboa de carne", "Av. Manoel Tavares,1040 - Centro", "Self-service");
		est4 = new Estabelecimento("Bar do cuscuz", "Rua Dr. Severino Ribeiro Cruz, 771 A - Centro.", "A la carte");

	}
	
	@Test
	public void testaConstrutor(){
		try{
			est1 = new Estabelecimento("Bar do cuscuz", "Rua Dr. Severino Ribeiro Cruz, 771 A - Centro.", "A la carte");
		}catch(Exception e){
			Assert.fail(e.getMessage());
		}
		
		try{
			est2 = new Estabelecimento("Taboa de carne", "Av. Manoel Tavares,1040 - Centro", "Self-service");
			
		}catch(Exception e){
			Assert.fail(e.getMessage());
		}
		
	}
	
	@Test
	public void testaGetNome(){
		Assert.assertEquals("Taboa de carne", est3.getNome());
		Assert.assertEquals("Bar do cuscuz", est4.getNome());
	}
	
	@Test
	public void testaSetNome() throws Exception{
		
		try{
			est3.setNome(null);
		}catch(Exception e){
			Assert.assertEquals("Nome Nulo.",e.getMessage());
		}
		
		try{
			est3.setNome("             ");
		}catch(Exception e){
			Assert.assertEquals("Nome invalido",e.getMessage());
		}
		
		try{
			est3.setNome("Cantinho universitario");
		}catch(Exception e){
			Assert.fail(e.getMessage());
		}
		
	}
	
	@Test
	public void testaGetEndereco(){
		Assert.assertEquals("Av. Manoel Tavares,1040 - Centro", est3.getEndereco());
		Assert.assertEquals("Rua Dr. Severino Ribeiro Cruz, 771 A - Centro.", est4.getEndereco());
	}
	
	@Test
	public void testaSetEndereco() throws Exception{
		
		try{
			est4.setEndereco("   ");
		}catch(Exception e){
			Assert.assertEquals("Endereco invalido", e.getMessage());
		}
		
		try{
			est4.setEndereco(null);
		}catch(Exception e){
			Assert.assertEquals("Endereco nulo.", e.getMessage());
		}
		
		try{
			est4.setEndereco("Rua Dr. Severino Ribeiro Cruz");
		}catch(Exception e){
			Assert.fail(e.getMessage());
		}
	}
	
	@Test
	public void testaGetTipoDeRefeicao(){
		Assert.assertEquals("Self-service", est3.getTipoDeRefeicao().getTipoRefeicao());
		Assert.assertEquals("A la carte", est4.getTipoDeRefeicao().getTipoRefeicao());
		
		Assert.assertEquals("A la carte", TipoDeRefeicao.A_LA_CARTE.getTipoRefeicao());
		Assert.assertEquals("Prato feito", TipoDeRefeicao.PRATO_FEITO.getTipoRefeicao());
		Assert.assertEquals("Self-service", TipoDeRefeicao.SELF_SERVICE.getTipoRefeicao());
	}
	
	@Test
	public void testaSetTipoDeRefeicao(){
		try {
			est3.setTipoDeRefeicao(null);
			Assert.fail();
		} catch (Exception e) {
			Assert.assertEquals("tipoDeRefeicao nula.", e.getMessage());
		}
		
	}
	
	@Test
	public void testaToString(){
		Assert.assertEquals( est3.getNome()+" "+est3.getEndereco()+" "+est3.getTipoDeRefeicao().getTipoRefeicao(), est3.toString());
		Assert.assertEquals( est4.getNome()+" "+est4.getEndereco()+" "+est4.getTipoDeRefeicao().getTipoRefeicao(), est4.toString());
	}
	
	@Test 
	public void testaSetEGetPopularidade(){
		est3.setPopularidade(99);
		Assert.assertEquals(99, est3.getPopularidade());
		
		est4.setPopularidade(-40);
		Assert.assertEquals(-40, est4.getPopularidade());
		
	}
}
